<?php

$V5_TIME = local_gettime();
$V5_NOW = date('Y-m-d H:i:s', $V5_TIME);
$V5_DATE = date('Y-m-d', $V5_TIME);

//mobile browser detected
if (C('config_mobile_detected')) {
	if (isset($_GET['mobile'])) {
		define('IS_MOBILE', intval($_GET['mobile']));
	}
	elseif (isset($session->data['is_mobile'])) {
		define('IS_MOBILE', $session->data['is_mobile']);
	}
	elseif (preg_match('/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i',$_SERVER['HTTP_USER_AGENT'])||preg_match('/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i',substr($_SERVER['HTTP_USER_AGENT'],0,4))) {
			define('IS_MOBILE', 1);
	}
	else {
		define('IS_MOBILE', 0);
	}
	$session->data['is_mobile'] = IS_MOBILE;
} else {
	define('IS_MOBILE', 0);
}

//router
$path = '';
$router = $request->get('route', 'common/home');
$parts = explode('/', str_replace(array('../', '..\\', '..'), '', $router));
foreach ($parts as $part) { 
	$path .= $part;	
	if (is_dir(DIR_APPLICATION . 'controller/' . $path)) {
		$path .= '/';
		array_shift($parts);
		continue;
	}	
	if (is_file(DIR_APPLICATION . 'controller/' . $path . '.php')) {
		array_shift($parts);
		break;
	}
}
$method = array_shift($parts);
if (!$method) $method = 'index';
define('ROUTE', $path);
define('METHOD', $method);
unset($parts);
//read system cache
$system_data = cache_read('system-'. C('config_language_id') .'.php');
foreach ($system_data as $key => $val) {
	$config->set($key, $val);
}
unset($system_data);

//category
$CATEGORY = NULL;
$CATEGORIES = cache_read("category-{$store_id}-". C('config_language_id') .".php");
if (isset($request->get['category_id'])) {
	$category_id = (int)$request->get['category_id'];
	if (isset($CATEGORIES[$category_id])) {
		$CATEGORY = $CATEGORIES[$category_id];
	}
}
//layout id
$layout_id = 0;
if ($router == 'product/category'  && $CATEGORY) {
	if (isset($CATEGORY['layout'])) {
		$layout_id = $CATEGORY['layout'];
	}
}

if (!$layout_id) {
	if ($router == 'product/product'  && isset($request->get['product_id'])) {
		$product_id = (int) $request->get['product_id'];
		$layouts = C('cache_layout_product');
		if (isset($layouts[$product_id])) {
			$layout_id = $layouts[$product_id];
		}
		elseif (count($layouts) == 30) {
			$layout_id = $db->queryOne("SELECT layout_id FROM @@product_to_layout WHERE product_id = $product_id AND store_id =  $store_id");
		}
	}
}

if (!$layout_id) {
	if ($router == 'page/index'  && isset($request->get['page_id'])) {
		$page_id = (int) $request->get['page_id'];
		$layouts = C('cache_layout_page');
		if (isset($layouts[$page_id])) {
			$layout_id = $layouts[$page_id];
		}
		elseif (count($layouts) == 30) {
			$layout_id = $db->queryOne("SELECT layout_id FROM @@page_to_layout WHERE page_id = $page_id AND store_id =  $store_id");
		}
	}
}

if (!$layout_id) {
	$layouts = C('cache_layout_route');
	foreach ($layouts as $_layout_id => $_layout_route) {
		if (strpos($_layout_route, ',') !== 0) {
			foreach (explode(',', $_layout_route) as $_lr) {
				if (strpos($router, $_lr) === 0) {
					$layout_id = $_layout_id;
					break 2;
				}
			}
		}
		elseif (strpos($router, $_layout_route) === 0) {
			$layout_id = $_layout_id;
			break;
		}
	}
}

if (!$layout_id) {
	$layout_id = C('config_layout_id');
}

define('LAYOUT', $layout_id);

loadThemeConfig();

/**
 * Front controller
 * @author Administrator
 *
 */
class FrontController extends Controller {
	/**
	 * construct
	 * @param object $registry
	 * @param string $route
	 * @param string $method
	 */
	public function __construct($registry, $route = '', $method = '') {
		parent::__construct($registry, $route, $method);
	
		//autoload language
		$this->language->load($route);
	
		$this->data['breadcrumbs'] = array();
		
		$this->data['breadcrumbs'][] = array(
				'text'      => $this->_['text_home'],
				'href'      => HTTP_SERVER,
				'separator' => false
		);
		
		if ($route != ROUTE) return;
		
		//default layout
		if (IS_MOBILE) {
			$this->children = array(
				'common/content_top',
				'common/content_bottom',
				'common/footer',
				'common/header'
			);
		}
		else {
			$this->children = array(
				'common/column_left',
				'common/column_right',
				'common/content_top',
				'common/content_bottom',
				'common/footer',
				'common/header'
			);
		}
	}
	
	/**
	 * get pagination object
	 */
	protected function pagination($total = 0, $page = null, $url = null,  $limit = null) {
		$pagination = new Pagination();
		$pagination->total = $total;
		$pagination->page = $page ? $page : 1;
		$pagination->url = $url ? $url : U($this->route, 'page={page}');
		$pagination->limit = $limit ? $limit : C('config_catalog_limit');
		$pagination->text = $this->_['text_pagination'];
		return $pagination;
	}
}

/**
 * Account controller
 * @author Administrator
 *
 */
class AccountController extends Controller {
	protected $vo = null;
	/**
	 * construct
	 * @param object $registry
	 * @param string $route
	 * @param string $method
	 */
	public function __construct($registry, $route = '', $method = '') {
		parent::__construct($registry, $route, $method);

		if (!$this->customer->isLogged()) {
			$this->session->data['redirect'] = $_SERVER['REQUEST_URI'];
			$this->redirect(US('account/login'));
		}
		
		//autoload language
		$this->language->load($route);

		if ($route != ROUTE) return;

		$this->document->setTitle($this->_['heading_title']);
		
		$this->load->helper('vo');
		$this->vo = new Vo();
		$this->data['vo'] = $this->vo;

		$this->data['breadcrumbs'] = array();
		
		$this->data['breadcrumbs'][] = array(
				'text'      => $this->_['text_home'],
				'href'      => HTTP_SERVER,
				'separator' => false
		);
		
		$this->data['breadcrumbs'][] = array(
				'text'      => $this->_['text_account'],
				'href'      => US('account/account'),
				'separator' => $this->_['text_separator']
		);
		
		//default layout
		if (IS_MOBILE) {
			$this->children = array(
				'common/content_top',
				'common/content_bottom',
				'common/footer',
				'common/header'
			);
		}
		else {
			$this->children = array(
				'common/column_left',
				'common/column_right',
				'common/content_top',
				'common/content_bottom',
				'common/footer',
				'common/header'
			);
		}
	}
	
	/**
	 * get pagination object
	 */
	protected function pagination($total = 0, $page = null, $url = null,  $limit = null) {
		$pagination = new Pagination();
		$pagination->total = $total;
		$pagination->page = $page ? $page : 1;
		$pagination->url = $url ? $url : US($this->route, 'page={page}');
		$pagination->limit = $limit ? $limit : C('config_catalog_limit');
		$pagination->text = $this->_['text_pagination'];
		return $pagination;
	}
}

/******************************************
 * 
 *  functions
 *  
 ******************************************/

//front url
function U($route, $args = '', $connection = 'NONSSL') {
	return $GLOBALS['url']->link($route, $args, $connection);
}

//ssl url
function US($route, $args = '') {
	return $GLOBALS['url']->link($route, $args, 'SSL');
}

function loadThemeConfig() {
	$theme_config = array();
	$file = DIR_TEMPLATE . C('config_template') . '/default.php';
	if (file_exists($file)) {
		$theme_config = include($file);
	}
	$file = DIR_TEMPLATE . C('config_template') . '/config.php';
	if (file_exists($file)) {
		$config = include($file);
		$theme_config = array_merge($theme_config, $config);
	}
	C('config_theme', $theme_config);
}